Lab 05 - Laboratoria problemowe 1

Lab. 05 - Laboratorium problemowe 1 - “Robot poszukujący”

Robot TurtleBot3 patrzący kamerą na kostkę z ArucoTagiem.

1. Laboratoria problemowe

W ramach laboratorium problemowego stawiany jest przed Państwem problem, zagadnienie, które wymaga pracy własnej, szukania rozwiązań, kreatywnego podejścia.

Efektem tego laboratorium nie musi być rozwiązanie problemu. Skupiamy się tutaj na możliwych podejściach, rozważaniu co może zadziałać a co nie zadziała, jakie potencjalne problemy możemy napotkać.

Wynikiem końcowym ma być krótki raport (wiecej na dole instrukcji) oraz ewentualnie program realizujący rozwiązanie problemu. Raport będzie oceniany jak standardowe zadanie domowe, natomiast za implementację możliwe jest do uzyskania dodatkowo do 5 punktów.

2. Problem

Dany jest robot TurtleBot3 typu waffle. Robot funkcjonuje w środowisku z gotową mapą, jest się w stanie w nim lokalizować. Jest wyposażony w skaner laserowy o zasięgu 3,5 metra oraz kamerę RGB.

W środowisku, po uruchomieniu, umieszczane są, w 5 losowych punktach (z góry zdefiniowanej puli z drobną wariancją), kostki z tagami ArUco (ze słownika ARUCO_ORIGINAL). Zakładamy, że robot nie zna przybliżonych położeń kostek.

Robot ma autonomicznie przeszukiwać środowisko i lokalizować położenie wszystkich 5 kostek wraz z ich ID.

Zadanie powinno być realizowane jako akcja, gdzie wynikiem jest pozycja wszystkich kostek.

3. Przygotowanie środowiska

Wersja 1: Obraz (większy rozmiar)

Przed przystąpieniem do pracy należy przygotować środowisko: pobrać obraz dockera i utworzyć na jego podstawie kontener.

Obraz konieczny do wykonywania dzisiejszych zajęć opiera się o osrf/ros:humble-desktop-full, ale zawiera paczki, które są niezbędne do prawidłowego wykonania zadań. Obraz można pobrać z tego linku, lub korzystając z polecenia:

wget --content-disposition --no-check-certificate https://chmura.put.poznan.pl/s/GmsDjYf1b2gQryt/download

Pobrany obraz należy wczytać, korzystając z polecenia, podając odpowiednią ścieżkę:

docker load < path/to/file.tar.gz

Następnie można przejść do tworzenia kontenera korzystając ze skryptów przygotowanych dla osób korzystających wyłącznie z CPU lub wyposażonych w GPU Nvidia. Można pobrać odpowiedni skrypt korzystając np. z wget.

Domyślnie kontener nosi nazwę ARM_05. UWAGA! Skrypty po uruchomieniu usuwają kontener o takiej nazwie przed utworzeniem nowego.

Wersja 2: Dockerfile

Plik Dockerfile jest dostępny tutaj. Można go pobrać poleceniem:

wget https://raw.githubusercontent.com/kamilmlodzikowski/LabARM/main/Lab05-Problem1/Dockerfile

Skrypt budujący jest dostępny tutaj. Można go pobrać poleceniem:

wget https://raw.githubusercontent.com/kamilmlodzikowski/LabARM/main/Lab05-Problem1/arm_05_build.sh

Następnie można przejść do tworzenia kontenera korzystając ze skryptów przygotowanych dla osób korzystających wyłącznie z CPU lub wyposażonych w GPU Nvidia. Można pobrać odpowiedni skrypt korzystając np. z wget.

Domyślnie kontener nosi nazwę ARM_05. UWAGA! Skrypty po uruchomieniu usuwają kontener o takiej nazwie przed utworzeniem nowego.

Korzystanie z kontenera

Po każdym ponownym uruchomieniu komputera (oraz w przypadku problemów z wyświetlaniem aplikacji okienkowych w dockerze), proszę pamiętać o wywoływaniu:

xhost +local:root

Nowy terminal można dołączyć do kontenera korzystając z polecenia:

docker exec -it ARM_05 bash

Konieczne będzie zbudowanie środowiska

cd /arm_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install

W przypadku błędów z uruchomieniem gazebo, proszę wywołać:

source /usr/share/gazebo/setup.bash
source /usr/share/gazebo-11/setup.bash

ROS_DOMAIN_ID

W przypadku pracy na komputerze w laboratorium może okazać się konieczne ustawienie ROS_DOMAIN_ID. Domyślnie, ROS2 rozgłasza wszystko innym komputerom w sieci z tym samym ROS_DOMAIN_ID. Wartość tej zmiennej można ustawić korzystając z:

export ROS_DOMAIN_ID = <wybrana_wartość>

Proszę wybrać losową wartość.

Wygodne może być dodanie tego exportu do bashrc:

echo 'export ROS_DOMAIN_ID=<wybrana_wartość>' >> ~/.bashrc 

4. Uruchomienie symulacji

W tej instrukcji będziemy ponownie wykorzystywać robota TurtleBot3 (waffle), tym razem w świecie arm_house.world z paczki arm05_sim. Można ją uruchomić poleceniem

cd /arm_ws
source install/setup.bash
ros2 launch arm05_sim world.launch.py

W przypadku błędów z uruchomieniem gazebo, proszę wywołać:

source /usr/share/gazebo/setup.bash
source /usr/share/gazebo-11/setup.bash
Zrzut ekranu symulacji

Pierwsze uruchomienie może trochę potrwać, wymagana jest odrobina cierpliwości.

Podczas uruchamiania w losowych miejscach są spawnowane kostki ArUco (pokazane poniżej). Za każdym razem będą one w nieco innym położeniu. Kostka jest sześcianem o boku 9 cm.

Kostka ArUco w symulacji Gazebo

Po uruchomieniu symulacji, pozycje kostek są zapisywane w folderze logs. Nazwy plików to sygnatury czasowe, ale zawsze ostatnie uruchomienie jest zapisywane w pliku latest.txt. W ten sposób można sprawdzić dokładność działania proponowanego systemu.

5. Zadanie do samodzielnej realizacji

W ramach zajęć należy zaproponować sposób rozwiązania problemu postawionego w punkcie 2.

Efektem ma być przygotowanie raportu, który będzie zawierał proponowaną strukturę programu (wraz z node’ami i topicami, które będą one wymieniać), paczki z sieci, które można wykorzystać do realizacji zadania oraz opis potencjalnych problemów, na które można napotkać.

Opcjonalnie, można również przygotować program realizujący postawione zadanie (wraz z jego opisem w ramach raportu). Za implementację można otrzymać dodatkowo do 5 punktów.


Autor: Kamil Młodzikowski